sql模糊查询,字段多值模糊查询(字段分割搜索,字符串转行)

您所在的位置:网站首页 sql 查找表模糊查询 sql模糊查询,字段多值模糊查询(字段分割搜索,字符串转行)

sql模糊查询,字段多值模糊查询(字段分割搜索,字符串转行)

2024-07-15 05:32| 来源: 网络整理| 查看: 265

对于平时简单的查询,一般使用like就能解决问题。如果字段值不连续,使用like就有点乏力了。

在工作中遇到这种业务,特整理如下文章,如果有更高效的解决方案,也望推荐互相学习。

1.表中数据如下:select * from MyTest

2.如果搜索表中 ”苹果" 数据,很简单就能搞定:select * from MyTest where name like '%苹果%'

3.简单小升级下,业务需要查找 “苹果,香蕉” 这种在数据库连续存放的数据,还是很简单:select * from MyTest where name like '%苹果,猕猴%'

4.现在业务大升级,需要查找 “苹果,猕猴” 这种不连续的数据,并且只要符合其中一个字段值,结果集就要包含其中。

对于这种查找,最直接想法:分割字符串,循环遍历去查询。这种方式性能不说,感觉就是一坨枯燥的东西。此业务首先源于数据库

设计如此,生成环境中”大量器件编号”通过逗号分隔存放在一个字段,前端参数顺序可变,所以产出此文章,也帮助遇到类似业务的朋友。

代码先呈现:之后做分析

+ View Code

结果如下:

总结:

  1.先把字符串转成XML格式,例如把“苹果,猕猴” 字符串装换成“苹果猕猴”XML格式

    SELECT [value]=CONVERT(XML,''+REPLACE('苹果,猕猴',',','')+'')

  2.核心:考虑把XML字符串分割成多行,也就是字符串转行功能。 

   参考文章:http://topic.csdn.net/u/20091023/17/CF3F75D1-DE50-4EE1-B9BE-43E4AF3C62EF.html

declare @xmlStr xml set @xmlStr= CONVERT (XML, '' + REPLACE ( '苹果,猕猴' , ',' , '' )+ '' ) SELECT N.v.value( '.' , 'varchar(100)' ) FROM @xmlStr.nodes( '/v' ) N ( v )

  3.OUTER APPLY函数的使用。

  参照文章:http://www.cnblogs.com/end/archive/2011/02/17/1957011.html

  4.原数据集inner join 字符串结果集,再查询inner join之后的结果集,筛选过结果。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3